Skip to content

Conversation

avivkeller
Copy link
Member

Fixes #3
Closes #185


This PR makes a few substantial changes to improve the DX of this tool.

  • Moves from INI/env files in templates/ to JSON configurations in configs/, this'll make it easier to edit and parse (See fix(properties): allow quote-less props #185 for an example of dotenv struggles)
  • Adds a --dry-run argument, as, when testing this, it's important not to create the issues and notes
  • Adds, and relies on, npx-style support. (i.e. npx . tsc or npx https://github.com/nodejs/create-node-meeting-artifacts tsc
    • With this in mind, it makes sense to put the entrypoint in src/, since it no longer really needs to be easily accessible for scripts, it'll be npx-ed.
  • Moves from a custom template system to Mustache.
  • Uses a dynamic matrix in GH Actions
  • Removes obsolete teams (with archived repositories)

The goal here is:

  • Improve DX
  • Less code to maintain

For example, running npx . web --dry-run produces:

[dry-run] Would create HackMD meeting notes document.
[dry-run] Would create GitHub issue with title: Node.js Web Team Meeting 2025-09-29
[dry-run] Would use the following content:
 ## Time

**UTC Mon, Sep 29, 2025, 07:00 PM**:

| Timezone | Date/Time |
| -------- | --------- |
| US / Pacific | Mon, Sep 29, 2025, 12:00 PM |
| US / Mountain | Mon, Sep 29, 2025, 01:00 PM |
| US / Central | Mon, Sep 29, 2025, 02:00 PM |
| US / Eastern | Mon, Sep 29, 2025, 03:00 PM |
| EU / Western | Mon, Sep 29, 2025, 08:00 PM |
| EU / Central | Mon, Sep 29, 2025, 09:00 PM |
| EU / Eastern | Mon, Sep 29, 2025, 10:00 PM |
| Moscow | Mon, Sep 29, 2025, 10:00 PM |
| Chennai | Tue, Sep 30, 2025, 12:30 AM |
| Hangzhou | Tue, Sep 30, 2025, 03:00 AM |
| Tokyo | Tue, Sep 30, 2025, 04:00 AM |
| Sydney | Tue, Sep 30, 2025, 05:00 AM |

Or in your local time:

* https://www.timeanddate.com/worldclock/fixedtime.html?msg=Node.js+Foundation+Node.js%20Web%20Team+Meeting+2025-09-29&iso=20250929T190000
* https://www.wolframalpha.com/input/?i=07%3A00%20PM+UTC%2C+Sep%2029%2C%202025+in+local+time

## Links

* https://hackmd.io/dry-run

## Agenda

Extracted from **web-agenda** labelled issues and pull requests from @nodejs prior to the meeting.

### nodejs/doc-kit

* Generate Type Declarations [#437](https://github.com/nodejs/doc-kit/issues/437)

### nodejs/nodejs.org

* content(`userland-migration`): make up to date [#8053](https://github.com/nodejs/nodejs.org/pull/8053)

### nodejs/web-team

* Create Means for Private Communications [#14](https://github.com/nodejs/web-team/issues/14)

## Invited

* @nodejs/web

### Observers/Guests


## Joining the meeting

* To join this meeting, visit <https://zoom-lfx.platform.linuxfoundation.org/meeting/91972207331?password=419d8029-a3c7-4536-9666-d9e97c0f0f93>.
* To observe this meeting, visit <https://livestream.openjsf.org>.
[dry-run] Would update HackMD document with self-referencing link.
[dry-run] Would use the following notes content:
 ## Time

**UTC Mon, Sep 29, 2025, 07:00 PM**:

| Timezone | Date/Time |
| -------- | --------- |
| US / Pacific | Mon, Sep 29, 2025, 12:00 PM |
| US / Mountain | Mon, Sep 29, 2025, 01:00 PM |
| US / Central | Mon, Sep 29, 2025, 02:00 PM |
| US / Eastern | Mon, Sep 29, 2025, 03:00 PM |
| EU / Western | Mon, Sep 29, 2025, 08:00 PM |
| EU / Central | Mon, Sep 29, 2025, 09:00 PM |
| EU / Eastern | Mon, Sep 29, 2025, 10:00 PM |
| Moscow | Mon, Sep 29, 2025, 10:00 PM |
| Chennai | Tue, Sep 30, 2025, 12:30 AM |
| Hangzhou | Tue, Sep 30, 2025, 03:00 AM |
| Tokyo | Tue, Sep 30, 2025, 04:00 AM |
| Sydney | Tue, Sep 30, 2025, 05:00 AM |

Or in your local time:

* https://www.timeanddate.com/worldclock/fixedtime.html?msg=Node.js+Foundation+Node.js%20Web%20Team+Meeting+2025-09-29&iso=20250929T190000
* https://www.wolframalpha.com/input/?i=07%3A00%20PM+UTC%2C+Sep%2029%2C%202025+in+local+time

## Links

* https://hackmd.io/dry-run
* https://github.com/dry-run/issue

## Agenda

Extracted from **web-agenda** labelled issues and pull requests from @nodejs prior to the meeting.

### nodejs/doc-kit

* Generate Type Declarations [#437](https://github.com/nodejs/doc-kit/issues/437)

### nodejs/nodejs.org

* content(`userland-migration`): make up to date [#8053](https://github.com/nodejs/nodejs.org/pull/8053)

### nodejs/web-team

* Create Means for Private Communications [#14](https://github.com/nodejs/web-team/issues/14)

## Invited

* @nodejs/web

### Observers/Guests


## Joining the meeting

* To join this meeting, visit <https://zoom-lfx.platform.linuxfoundation.org/meeting/91972207331?password=419d8029-a3c7-4536-9666-d9e97c0f0f93>.
* To observe this meeting, visit <https://livestream.openjsf.org>.
Created GitHub issue: https://github.com/dry-run/issue
Created HackMD document: https://hackmd.io/dry-run
Dry run mode: no data was created or updated.

@Copilot Copilot AI review requested due to automatic review settings September 28, 2025 20:09
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR performs a major refactoring to improve the developer experience by migrating from INI/env files to JSON configurations, replacing custom templating with Mustache, adding dry-run support, and enabling npx-style usage. The primary goal is to simplify configuration management and reduce maintenance overhead.

  • Migrates configuration from templates/ directory with custom parsing to structured JSON configs/ directory
  • Replaces custom template system with industry-standard Mustache templating
  • Adds --dry-run flag for testing without creating artifacts

Reviewed Changes

Copilot reviewed 117 out of 142 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/index.mjs New main entry point with Commander.js CLI and dry-run support
template.hbs Single Mustache template replacing multiple custom templates
configs/*.json JSON configuration files replacing template-based config system
src/meeting.mjs Simplified meeting logic using JSON configs and Mustache
package.json Updated dependencies and entry points for npx support

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@avivkeller avivkeller marked this pull request as draft September 28, 2025 20:33
@avivkeller avivkeller force-pushed the use-json-use-templates-use-npx-add-dry-run branch from 819adb5 to 37d1262 Compare September 30, 2025 20:10
@avivkeller avivkeller marked this pull request as ready for review September 30, 2025 20:10
@Copilot Copilot AI review requested due to automatic review settings September 30, 2025 20:10
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 117 out of 142 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

src/config.mjs:1

  • The comments reference outdated configuration properties. The meetingGroup is now handled by commander in src/index.mjs, and google.clientId is not used anywhere in the codebase. These comments should be updated to reflect the actual usage.
/**

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@avivkeller avivkeller force-pushed the use-json-use-templates-use-npx-add-dry-run branch 2 times, most recently from 6436c01 to 0ea464b Compare September 30, 2025 20:12
@richardlau richardlau mentioned this pull request Oct 3, 2025
@ovflowd
Copy link
Member

ovflowd commented Oct 9, 2025

@avivkeller apologies, I forgot to ask if you could rebase?

@Copilot Copilot AI review requested due to automatic review settings October 9, 2025 20:39
@avivkeller avivkeller force-pushed the use-json-use-templates-use-npx-add-dry-run branch from 0ea464b to 4fcb8a6 Compare October 9, 2025 20:39
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 117 out of 142 changed files in this pull request and generated 2 comments.


Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

avivkeller and others added 2 commits October 9, 2025 16:43
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@Copilot Copilot AI review requested due to automatic review settings October 9, 2025 20:45
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 117 out of 142 changed files in this pull request and generated 3 comments.


Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

);
return obj;
}, {});
Object.entries(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this was introduced in another PR, but could you please cleanup this function? It is too complex. The entries + reduce + map + complx split.slice.join.push is just too much.

// Search for events in the specified calendar using the filter text
const response = await calendarClient.events.list({
calendarId: meetingConfig.properties.CALENDAR_ID?.replace(/"/g, ''),
calendarId: `${calendar.id}@group.calendar.google.com`,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LFX doesn't use Google Calendar, so we need to support non-Google calendar too.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To my understanding that is just a manual replica that @bensternthal keeps updating.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah for ow we are manually updating since we have some events in google calendar and some in LFX. We will be moving everything at some point to LFX. LFX does have ICAL feeds etc so folks can still add the calendar to whatever calendar they chose to use.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah for ow we are manually updating since we have some events in google calendar and some in LFX. We will be moving everything at some point to LFX. LFX does have ICAL feeds etc so folks can still add the calendar to whatever calendar they chose to use.

Can you link the ICAL feed? We can update the script to use it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


const program = new Command();
program
.argument('[group]', 'Meeting group', 'tsc')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We shouldn't have a default. Should fail if not provided IMO.

);

// Create HackMD document with meeting notes and tags
let hackmdNote;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like the use of let here

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could simply use a ternary

const issueContent = mustache.render(template, templateContext);

// Create the actual issue
let githubIssue;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ternary instead of Let

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All these dry run if statements are bloaty. We could simply have one big if

if (dryRun) {
  ....
  do all these things
  return;
}

normal operation

│ ├── github.mjs # GitHub API integration
│ ├── google.mjs # Google APIs integration
│ ├── meeting.mjs # Meeting operations
| ├── index.mjs # Main application
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about configs folder?

Copy link
Member

@ovflowd ovflowd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I'm a fan of completely removing Markdown capabilities and all the content coming from a JSON file.

Surely a config JSON format is cool and standardised, but I should still be able to add whatever Markdown content I want as extra content and surely doing that via JSON ain't practical. It feels this PR is moving one step forward and two backwards.

@avivkeller
Copy link
Member Author

I'm not sure I'm a fan of completely removing Markdown capabilities and all the content coming from a JSON file.

Surely a config JSON format is cool and standardised, but I should still be able to add whatever Markdown content I want as extra content and surely doing that via JSON ain't practical. It feels this PR is moving one step forward and two backwards.

Okay, let's break this up into several PRs, so each "step" can be independent.

I'll break this up today into:

  1. Dry Run
  2. NPM changes
  3. Mustache Templates
  4. JSON configs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TODO: use template for issue

3 participants